package cn.itcast.tlias.com.tliaswork.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;


@Slf4j
//将这个AOP相关的类,并且交给Spring来管理
@Component
//@Aspect //声明这是一个Aop类
public class TimeAspect {

    //execution(* 其中这个*表示返回值
    // com.itheima.service. 特指包名
    // *. 特指类名或者接口名
    // *(..)) 特指方法名
    @Around("cn.itcast.tlias.com.tliaswork.aop.MyAspect1.pt()")  //该注解的含义是该包下的com.itheima.service所有的接口和类中,所有的方法进行编程
    public Object recordTime(ProceedingJoinPoint proceedingJoinPoint //固定的参数
                                                                     ) throws Throwable {
        long begin = System.currentTimeMillis();
        Object proceed = proceedingJoinPoint.proceed(); //调用原始方法,固定方法,原始方法可能会抛异常或者有返回值
        long end = System.currentTimeMillis();
        //获取相关方法的名称等信息
        log.info(proceedingJoinPoint.getSignature() + "执行耗时:{}ms", end - begin);
        return proceed;
    }
}
